[Amazon FSx for NetApp ONTAP] ADのドメインに参加せずにSMBでファイル共有に接続してみる
AD DS用意するの面倒だな
こんにちは、のんピ(@non____97)です。
皆さんはAmazon FSx for NetApp ONTAP(以降FSx for ONTAP)にSMBで接続する検証のためにAD DSを用意するのが面倒だなとなと思ったことはありますか? 私はあります。
FSx for ONTAPのSVMをドメイン参加させることで、同じドメインに参加するSMBクライアントの認証・認可をすることができます。
Amazon FSx でストレージ仮想マシン (SVM) を作成する場合、オプションでアクティブディレクトリドメインに参加して、ユーザー認証、ファイルおよびフォルダレベルのアクセスコントロールを提供できます。お使いの SMB クライアントは、アクティブディレクトリ内の既存のユーザー ID を使用して自分自身を認証し、SVM のボリュームにアクセスできます。ユーザーは、既存の ID を使用して、個々のファイルやフォルダへのアクセスをコントロールすることもできます。さらに、既存のファイルおよびフォルダ、およびこれらのアイテムのセキュリティアクセスコントロールリスト (ACL) の設定を Amazon FSx に変更されることなく移行できます。
しかし、SMBを使った接続を少し検証をするめにAD DSを設定するのは非常に手間です。実際の方法は以下記事やAWS公式ドキュメントに記載があります。
「これは面倒だ」
と思われた方に朗報です。実はADのドメインに参加しなくてもワークグループに参加させることも可能なんです。
NetAppのKnowledge Baseにも以下のように記載されています。
- ワークグループモードは、 Windows の標準機能で、 Active Directory ドメインなしでワークステーションを操作できます。これにより、 DC を介さずにデータを認証および提供できます
- 旧バージョンの Data ONTAP ではワークグループモードのサポートは提供されていませんが、 ONTAP 9.0 以降ではサポートが追加されています
- この機能は、次のような状況で重要です。
- お客様が Microsoft ドメインインフラストラクチャを必要としない場合
- お客様が規制ポリシーによって Microsoft ドメインを使用できない場合
ONTAPのコマンドリファレンスにも、以下のようにワークグループに参加できると記載がありますね。
The vserver cifs create command creates a CIFS server on a Vserver. When you create the CIFS server, you can add it to an existing CIFS domain, or you can join it to a workgroup. When you add it to an existing CIFS domain, the storage system prompts you to provide the credentials of a user account that has sufficient privileges to add computers to the -ou container within the -domain domain. The user account must have a password that cannot be empty. If the new CIFS server is joining a domain, this command might take several minutes to complete.
実際に試してみたので紹介します。
いきなりまとめ
- 簡単にワークグループのCIFSサーバーを構築できる
- ただし、本番環境のCIFSサーバーではドメイン参加することをオススメ
- ローカルユーザーは基本的に移行できないので、ワークグループのCIFSサーバーだと移行時に苦労する
検証環境
検証環境は以下の通りです。
FSx for ONTAPでワークグループのCIFSサーバーとCIFSファイル共有を作成して、Windows ServerのEC2インスタンスからSMBで接続します。
検証環境はAWS CDKでデプロイします。使用したコードは以下リポジトリに保存しています。
CIFSサーバーの設定
それでは、ワークグループに参加するCIFSサーバーをSVM内に用意します。
まず、SVM内にCIFSサーバーがあるか確認します。
# FSx for ONTAPファイルシステムにSSHで接続 > ssh fsxadmin@management.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com The authenticity of host 'management.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com (10.0.1.42)' can't be established. ECDSA key fingerprint is SHA256:496yfT9r4Nz5qg/NKwPs7Dh7zINNBRc+xcSUw1oWl6o. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'management.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com,10.0.1.42' (ECDSA) to the list of known hosts. Password: This is your first recorded login. # CIFSサーバーの確認 FsxId0ad183f269f00ec0f::> vserver cifs show This table is currently empty.
CIFSサーバーは存在していないようですね。
それではワークグループに参加するCIFSサーバーを作成します。
# CIFSサーバーの作成 FsxId0ad183f269f00ec0f::> vserver cifs create -vserver fsx-for-ontap-svm -cifs-server cifs-server -workgroup fsxn-workgroup Notice: SMB1 protocol version is obsolete and considered insecure. Therefore it is deprecated and disabled on this CIFS server. Support for SMB1 might be removed in a future release. If required, use the (privilege: advanced) "vserver cifs options modify -vserver fsx-for-ontap-svm -smb1-enabled true" to enable it. # 作成したCIFSサーバーの確認 FsxId0ad183f269f00ec0f::> vserver cifs show Server Status Domain/Workgroup Authentication Vserver Name Admin Name Style ----------- --------------- --------- ---------------- -------------- fsx-for-ontap-svm CIFS-SERVER up FSXN-WORKGROUP workgroup # 作成したCIFSサーバーの詳細確認 FsxId0ad183f269f00ec0f::> vserver cifs show -instance Vserver: fsx-for-ontap-svm CIFS Server NetBIOS Name: CIFS-SERVER NetBIOS Domain/Workgroup Name: FSXN-WORKGROUP Fully Qualified Domain Name: - Organizational Unit: - Default Site Used by LIFs Without Site Membership: - Workgroup Name: FSXN-WORKGROUP Authentication Style: workgroup CIFS Server Administrative Status: up CIFS Server Description: List of NetBIOS Aliases: -
FSXN-WORKGROUP
というワークグループに参加するCIFSサーバーを作成できました。
なお、CIFSサーバーはSVMに一つしか作成できません。既にCIFSサーバーがある場合は注意しましょう。
Each Vserver can have only one CIFS server.
その場合は、vserver cifs deleteでCIFSサーバーを削除して作り直すか、vserver cifs modifyでワークグループを指定する必要がありそうです。
CIFSユーザーの作成
次にSMBで接続するときの認証で使うCIFSユーザーを作成します。
# CIFSユーザーの作成 FsxId0ad183f269f00ec0f::> vserver cifs users-and-groups local-user create -vserver fsx-for-ontap-svm -user-name cifs-user -is-account-disabled false Enter the password: Confirm the password: # 作成したCIFSユーザーの確認 FsxId0ad183f269f00ec0f::> vserver cifs users-and-groups local-user show -instance Vserver: fsx-for-ontap-svm User Name: CIFS-SERVER\Administrator Full Name: Description: Built-in administrator account Is Account Disabled: true Vserver: fsx-for-ontap-svm User Name: CIFS-SERVER\cifs-user Full Name: - Description: - Is Account Disabled: false 2 entries were displayed.
CIFSファイル共有の作成
次にCIFSファイル共有の作成をします。
CIFSファイル共有名には以下のような命名規約があります。注意しましょう。
- ONTAP の共有の命名規則は Windows の命名規則と同じであり、次の要件が含まれています。
- 共有名は SMB サーバでそれぞれ一意にする必要があります。
- 共有名では大文字と小文字は区別されません。
- 共有名の最大長は 80 文字です。
- 共有名では Unicode がサポートされます。
- $ 記号で終わる共有名は非表示の共有です。
- 管理用共有の ADMIN$ 、 IPC$ 、 c$ は、すべての CIFS サーバで自動的に作成されます。これらの共有名は予約されています。
- 共有の作成時に ONTAP_ADMIN$ という共有名は使用できません。
- 共有名ではスペースの使用がサポートされます。
- 共有名の先頭または末尾の文字をスペースにすることはできません。
- スペースを含む共有名は引用符で囲む必要があります。
- 単一引用符は共有名の一部とみなされ、引用符の代わりに使用することはできません。
- SMB 共有の名前では次の特殊文字の使用がサポートされます。
- !@ #$%&'__ 。~ () { }
- SMB 共有の名前では次の特殊文字の使用はサポートされません。
- "//\:;| 、?* =
# ボリュームの確認 FsxId0ad183f269f00ec0f::> volume show Vserver Volume Aggregate State Type Size Available Used% --------- ------------ ------------ ---------- ---- ---------- ---------- ----- fsx-for-ontap-svm fsx_for_ontap_svm_root aggr1 online RW 1GB 972.5MB 0% fsx-for-ontap-svm fsx_for_ontap_volume aggr1 online RW 100GB 95.00GB 0% 2 entries were displayed. # ボリュームのジャンクションパスの確認 FsxId0ad183f269f00ec0f::> volume show -fields junction-path vserver volume junction-path ----------------- ---------------------- ------------- fsx-for-ontap-svm fsx_for_ontap_svm_root / fsx-for-ontap-svm fsx_for_ontap_volume /volume # CIFSファイル共有の作成 FsxId0ad183f269f00ec0f::> vserver cifs share create -vserver fsx-for-ontap-svm -share-name cifs-share -path /volume # CIFSファイル共有の一覧 FsxId0ad183f269f00ec0f::> vserver cifs share show -vserver fsx-for-ontap-svm Vserver Share Path Properties Comment ACL -------------- ------------- ----------------- ---------- -------- ----------- fsx-for-ontap-svm oplocks BUILTIN\Administrators / Full Control c$ / browsable - changenotify show-previous-versions fsx-for-ontap-svm oplocks Everyone / Full Control cifs-share /volume browsable - changenotify show-previous-versions fsx-for-ontap-svm browsable ipc$ / - - 3 entries were displayed. # 作成したCIFSファイル共有の詳細確認 FsxId0ad183f269f00ec0f::> vserver cifs share show -vserver fsx-for-ontap-svm -share-name cifs-share -instance Vserver: fsx-for-ontap-svm Share: cifs-share CIFS Server NetBIOS Name: CIFS-SERVER Path: /volume Share Properties: oplocks browsable changenotify show-previous-versions Symlink Properties: symlinks File Mode Creation Mask: - Directory Mode Creation Mask: - Share Comment: - Share ACL: Everyone / Full Control File Attribute Cache Lifetime: - Volume Name: fsx_for_ontap_volume Offline Files: manual Vscan File-Operations Profile: standard Maximum Tree Connections on Share: 4294967295 UNIX Group for File Create: -
CIFSファイル共有が作成できました。
作成したCIFSファイル共有に接続してみます。
# SMBのクライアントのワークグループを確認 > Get-WMIObject Win32_ComputerSystem Domain : WORKGROUP Manufacturer : Amazon EC2 Model : t3.micro Name : EC2AMAZ-ER02D6H PrimaryOwnerName : EC2 TotalPhysicalMemory : 1043886080 # 現在のドライブ一覧の確認 > Get-PSDrive Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- Alias Alias C 13.35 16.65 FileSystem C:\ Windows\system32 Cert Certificate \ Env Environment Function Function HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE Variable Variable WSMan WSMan # CIFSユーザーの認証情報を使ってSMBでZドライブにボリュームをマウント > net use Z: \\svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com\cifs-share The password is invalid for \\svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com\cifs-share. Enter the user name for 'svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com': CIFS-SERVER\cifs-user Enter the password for svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com: The command completed successfully. # Zドライブにマウントされているか確認 > Get-PSDrive Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- Alias Alias C 13.35 16.65 FileSystem C:\ Windows\system32 Cert Certificate \ Env Environment Function Function HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE Variable Variable WSMan WSMan Z 0.00 95.00 FileSystem \\svm-06f51f2e59a98b1f0.fs-0ad18...
無事マウントできました。ADの環境を用意するより遥かに簡単ですね。
また、クライアントとCIFSサーバーのワークグループ名が違っても認証するユーザーの認証情報を正しく入力すれば、接続できるようです。
おまけに、フォルダの作成やファイルの作成/削除ができることを確認しておきます。
# フォルダの作成 > New-Item Z:\non-97 -type directory Directory: Z:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 10/8/2022 2:45 AM non-97 # 100MBのランダムなバイナリファイルを作成 > $random_bin = new-object byte[] (1024 * 1024 * 100); > (new-object Random).NextBytes($random_bin) > [IO.File]::WriteAllBytes("Z:\non-97\binary_file", $random_bin) # ファイルが作成されたことを確認 > ls Z:\non-97\ Directory: Z:\non-97 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 10/8/2022 2:50 AM 104857600 binary_file # ファイルを削除 > rm Z:\non-97\binary_file # ファイルが削除されたことを確認 > ls Z:\non-97\
アクセスコントロールの設定
作成したCIFSファイル共有のアクセスコントロールを確認してみましょう。
# CIFSファイル共有のアクセス制限の確認 FsxId0ad183f269f00ec0f::> vserver cifs share access-control show -vserver fsx-for-ontap-svm Share User/Group User/Group Access Vserver Name Name Type Permission -------------- ----------- --------------------------- ----------- ----------- fsx-for-ontap-svm c$ BUILTIN\Administrators windows Full_Control fsx-for-ontap-svm cifs-share Everyone windows Full_Control 2 entries were displayed. # 作成したCIFSファイル共有のアクセス制限の詳細確認 FsxId0ad183f269f00ec0f::> vserver cifs share access-control show -vserver fsx-for-ontap-svm -share cifs-share -instance Vserver: fsx-for-ontap-svm Share Name: cifs-share User/Group Name: Everyone User or Group Type: windows Access Type: Full_Control Windows SID: S-1-1-0 Access mask: 1f01ff
CIFSファイル共有にアクセスできるのがEveryone
でFull_Control
となっています。そのため、どんなCIFSユーザーでも接続できてあらゆる操作を行うことが可能です。
試しに、特定のCIFSユーザーのみ読み取りできるように設定変更してみます。
# CIFSファイル共有に cifs-user が読み取りできるようなアクセスコントロールを追加 FsxId0ad183f269f00ec0f::> vserver cifs share access-control create -share cifs-share -user-or-group cifs-user -user-group-type windows -permiss ion Read # CIFSファイル共有に Everyone のアクセスコントロールを削除 FsxId0ad183f269f00ec0f::> vserver cifs share access-control delete -share cifs-share -user-or-group Everyone # CIFSファイル共有に cifs-user が読み取りできるようなアクセスコントロールが追加されたことを確認 # CIFSファイル共有に Everyone のアクセスコントロールが削除されたことを確認 FsxId0ad183f269f00ec0f::> vserver cifs share access-control show -vserver fsx-for-ontap-svm -share cifs-share -instance Vserver: fsx-for-ontap-svm Share Name: cifs-share User/Group Name: cifs-user User or Group Type: windows Access Type: Read Windows SID: S-1-5-21-2424970675-3159713313-1452867103-1000 Access mask: 1200a9 # 比較用のCIFSユーザーの作成 FsxId0ad183f269f00ec0f::> vserver cifs users-and-groups local-user create -vserver fsx-for-ontap-svm -user-name cifs-user02 -is-account-disabled false Enter the password: Confirm the password: # 比較用CIFSユーザーが作成されたことを確認 FsxId0ad183f269f00ec0f::> vserver cifs users-and-groups local-user show -instance Vserver: fsx-for-ontap-svm User Name: CIFS-SERVER\Administrator Full Name: Description: Built-in administrator account Is Account Disabled: true Vserver: fsx-for-ontap-svm User Name: CIFS-SERVER\cifs-user Full Name: - Description: - Is Account Disabled: false Vserver: fsx-for-ontap-svm User Name: CIFS-SERVER\cifs-user02 Full Name: - Description: - Is Account Disabled: false 3 entries were displayed.
アクセスコントロールの設定が完了したので、意図した挙動をするのか確かめてみます。
# 現在のドライブ一覧 > Get-PSDrive Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- Alias Alias C 13.37 16.63 FileSystem C:\ Windows\system32 Cert Certificate \ Env Environment Function Function HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE Variable Variable WSMan WSMan # cifs-user02 はマウントできないことを確認 > net use Z: \\svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com\cifs-share The password is invalid for \\svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com\cifs-share. Enter the user name for 'svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com': CIFS-SERVER\cifs-user02 Enter the password for svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com: System error 5 has occurred. Access is denied. # cifs-user はマウントできることを確認 > net use Z: \\svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com\cifs-share The password is invalid for \\svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com\cifs-share. Enter the user name for 'svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com': CIFS-SERVER\cifs-user Enter the password for svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com: The command completed successfully. # Zドライブにマウントされているか確認 > Get-PSDrive Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- Alias Alias C 13.37 16.63 FileSystem C:\ Windows\system32 Cert Certificate \ Env Environment Function Function HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE Variable Variable WSMan WSMan Z 0.00 95.00 FileSystem \\svm-06f51f2e59a98b1f0.fs-0ad18... # フォルダ配下を参照できるか確認 > ls Z:\non-97\ # 書き込みができないことを確認 > echo test > Z:\non-97\test out-file : Access to the path 'Z:\non-97\test' is denied. At line:1 char:1 + echo test > Z:\non-97\test + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OpenError: (:) [Out-File], UnauthorizedAccessException + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand # フォルダを削除できないことを確認 > rmdir Z:\non-97 rmdir : Cannot remove item Z:\non-97: Access to the path 'Z:\non-97' is denied. At line:1 char:1 + rmdir Z:\non-97 + ~~~~~~~~~~~~~~~ + CategoryInfo : WriteError: (Z:\non-97:DirectoryInfo) [Remove-Item], IOException + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand
アクセスコントロールの設定通り、cifs-user
のみ読み取りでき、他のユーザーは接続できないことを確認できました。
サクッと検証したい時はワークグループのCIFSサーバーを用意してみよう
ADのドメインに参加せずにAmazon FSx for NetApp ONTAPにSMBでファイル共有に接続してみました。
ワークグループのCIFSサーバーを用意することで、非常に手早くSMBで接続できることを確認できました。サクッと検証したい時はかなり有用だと思います。
AD DSの環境を用意する必要も、サービスアカウントの準備も不要なので、「げぇっ AD」となった方もトライしてみてはいかがでしょうか。
2024/2/15 追記
なお、本番利用でワークグループのCIFSサーバーを使うのは控えましょう。理由は移行をした際にアクセスできなくなる可能性があるためです。
ワークグループのCIFSサーバーの認証で使用するローカルユーザやローカルグループは基本的に移行することが出来ません。
ローカルユーザーやローカルグループはSVM内で固有の情報です。そのため、SnapMirrorやDataSyncでACLの情報を転送しても、転送先のSVMにはそのSIDに紐づくローカルユーザーやローカルグループが存在しません。同じ名前でローカルユーザーやローカルグループを作成してもSIDは一致しません。結果として移行先でアクセスができない状況になります。
後からACLをドメインユーザーやドメイングループで管理するように変更するのも中々大変です。それであれば、最初からドメイン参加することをお勧めします。
2024/2/15 追記ここまで
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!